﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class move : MonoBehaviour
{
    // 角色钢体
    public Rigidbody Rig;
    // 底下平台
    public GameObject box;
    // 计时
    public float timed,
        chixuTime;  // 按键持续时间
    public float tiaoYueTimeMax=1;    //最长跳跃时间
    public float liDu=280; // 力度

    public float DisMin = 4, // 距离范围
                DisMax = 8;
    // 角度范围
    public int RotMin = -3, 
                RotMax = 4;
    public float RotVal = 30;// 角度值

    // 失败平面
    public GameObject shiBaiPingMian;
    // 是否失败
    public bool isShiBai = false;

    // 失败按钮
    public GameObject shiBaiButton;

    // 分数统计
    public int score = -1;
    // 分数文本ui
    public UnityEngine.UI.Text FenShu;
    // 颜色
    public Color myColor1, myColor2;
    // 重心
    public Transform trans;

    Vector3 _body = new Vector3(0, 0, 0);

    // Start is called before the first frame update
    void Start()
    {
        Rig.centerOfMass = trans.localPosition;// 设置重心
        _body = Rig.transform.localScale;
        this.GetComponent<Animator>().SetInteger("guaiwu", 0);
    }
    public GameObject shangYiCiPingTai;  // 暂存每次生成的平台
    // 碰撞监听，collistion为碰撞的对象
    private void OnCollisionEnter(Collision collistion)
    {
        // 如果碰到地面
        if (collistion.gameObject == shiBaiPingMian)
        {
            // 死亡动画
            this.GetComponent<Animator>().SetInteger("guaiwu", 3);
            print("失败");
            isShiBai = true;
            shiBaiButton.SetActive(true);
        }
        // 如果没有失败
        if (!isShiBai)
        {
            if (shangYiCiPingTai != null && shangYiCiPingTai == collistion.gameObject)
            {
                score += 1;
                FenShu.text = "分数：" + score;
                // 站立动画
                this.GetComponent<Animator>().SetInteger("guaiwu", 0);
            }
        }
        // 初始创建一个平台，原地跳不创建平台
        if (shangYiCiPingTai == null || shangYiCiPingTai == collistion.gameObject)
        {
            
            //Instantiate(box,box.transform.position+Vector3.forward*6,box.transform.rotation);
            // 创建底下平台，在当前碰撞位置往前（Z轴）克隆一个，随机距离，随机方向
            // 1.在当前位置生成平台，并缓存到变量中
            shangYiCiPingTai = Instantiate(box,
                collistion.gameObject.transform.position,
                collistion.gameObject.transform.rotation);
            // 2.平台旋转
            shangYiCiPingTai.transform.Rotate(Vector3.up * (Random.Range(RotMin,RotMax) * RotVal));
            // 3.平台移动位置
            shangYiCiPingTai.transform.Translate(Vector3.forward * Random.Range(DisMin, DisMax));
            // 4.角色改变方向，方向和平台一致
            transform.forward = shangYiCiPingTai.transform.position - collistion.transform.position;

            // 改变平台的颜色
            shangYiCiPingTai.GetComponent<MeshRenderer>().materials[0].SetColor("_Color", 
                Color.Lerp(myColor1, myColor2,Random.value));
        }
        
        
        

        

    }
    
    // 重新开始按钮function
    public void ChongXinKaiShi()
    {
        SceneManager.LoadScene("SampleScene");
    }
    // Update is called once per frame
    void Update()
    {
       
        
            if (Input.GetKey(KeyCode.Mouse0) || Input.GetKey(KeyCode.Space))
            {
                // 按住鼠标左键或空格键缩小
                //Rig.transform.localScale += new Vector3(1, -1, 1) * 0.8f * Time.deltaTime;
                //print("当前缩放：" + Rig.transform.localScale);
                //this.GetComponent<Animator>().SetInteger("guaiwu", 1);
               
            }
            // 鼠标或空格键左键按下
            if (Input.GetMouseButtonDown(0)||Input.GetKeyDown(KeyCode.Space))
            {
                //秒数
                timed = Time.time;
                // 跑步动画
                this.GetComponent<Animator>().SetInteger("guaiwu", 1);
            }
            // 鼠标或空格键抬起
            if (Input.GetMouseButtonUp(0) || Input.GetKeyUp(KeyCode.Space))
            {
                // 跳跃动画
                this.GetComponent<Animator>().SetInteger("guaiwu", 4);
                // 抬起恢复初始大小
                //Rig.transform.localScale = _body;
                // 计算按下到抬起的时间
                chixuTime = Time.time - timed;
                // 没有失败
                if (!isShiBai)
                {
                    // 保证蓄力时间最大为1
                    //print(Mathf.Min( chixuTime / tiaoYueTimeMax, tiaoYueTimeMax));
                    print(liDu * Mathf.Min(chixuTime / tiaoYueTimeMax, tiaoYueTimeMax));
                    //方向向量
                    Rig.AddForce((Vector3.up + transform.forward) * liDu * Mathf.Min(chixuTime / tiaoYueTimeMax, tiaoYueTimeMax));
                }
            }
           
        
    }
}
